home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
tex
/
itrns211.zip
/
SRC
/
ILEX.L
< prev
next >
Wrap
Text File
|
1991-10-15
|
15KB
|
383 lines
%e 1500
%p 3100
%a 3000
%{
/* above directives increase the various table sizes used by Lex */
/*
*==========================================================================
* Copyright 1991 Avinash Chopde, All Rights Reserved.
*
* Permission to use, copy, modify and distribute this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Avinash Chopde not be used in
* advertising or publicity pertaining to distribution of the software
* without specific, written prior permission.
* Avinash Chopde makes no representations about the suitability of this
* software for any purpose.
* It is provided "as is" without express or implied warranty.
*
* AVINASH CHOPDE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
* IN NO EVENT SHALL AVINASH CHOPDE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THIS SOFTWARE.
*
* Author: Avinash Chopde, 1991
* C2 Colonial Drive #4, Andover, MA 01810, USA.
*
*/
static char S_RCSID[] = "$Header: e:/itrans/src/rcs/ilex.l 1.8 91/10/15 00:13:49 avinash Exp $";
#include "itrans.h"
#include "ifm.h"
#ifdef MSDOS
#include "y_tab.h"
#else
#include "y.tab.h"
#endif
#ifdef YYSTYPE
extern YYSTYPE yylval;
#else
extern int yylval;
#endif
extern int G_lineno;
extern int in_letter(); /* returns TRUE if the parse (iyacc.y) is in the
* middle of scanning some letter.
* Used to decide whether to tell the parser to
* stop looking for more characters, and
* terminate the letter.
* That is done by sending in a ENDPREV_TOK.
*/
extern char G_endprev_str[]; /* defined in iyacc.y, used to pass string
* to process
*/
static S_lex_ichar(int t);
static S_print(char* t);
static S_skipcomments();
static int S_lang_tok = -1; /* which language being scanned... */
%}
%START ITEXT DCOMMAND
%%
"\\%" {
/* seen \% in the input, complete current
* word first, and then echo out
* the chars in G_endprev_str.
*/
if (in_letter()) {
S_print("ichar \\ %");
strcpy(G_endprev_str, "\\%");
return (yylval=ENDPREV_TOK);
} else {
ECHO;
}
}
<ITEXT>"\\" {
/* seen a single backslash */
if (in_letter()) {
/* need to complete current word, send
* a ENDPREV token to the parser.
*/
S_print("ichar \\");
/* unput('\\'); ?? use yyless() here */
yyless(0);
G_endprev_str[0] = '\0';
return (yylval=ENDPREV_TOK);
} else {
BEGIN DCOMMAND;
}
}
<ITEXT>"%" { S_print("ichar %");
if (in_letter()) {
/* need to complete current word, send
* a ENDPREV token to the parser.
*/
/* unput('%'); handle comment next time around */
yyless(0);
}
return S_skipcomments();
/* is a comment, until end-of-line */
}
"%" { S_skipcomments(); putchar('\n'); }
<ITEXT>"a" {S_lex_ichar(A_TOK); return (yylval = A_TOK); }
<ITEXT>"aa" {S_lex_ichar(AA_TOK); return (yylval = AA_TOK);}
<ITEXT>"A" {S_lex_ichar(AA_TOK); return (yylval = AA_TOK);}
<ITEXT>"i" {S_lex_ichar(I_TOK); return (yylval = I_TOK); }
<ITEXT>"ii" {S_lex_ichar(II_TOK); return (yylval = II_TOK);}
<ITEXT>"I" {S_lex_ichar(II_TOK); return (yylval = II_TOK);}
<ITEXT>"u" {S_lex_ichar(U_TOK); return (yylval = U_TOK); }
<ITEXT>"U" {S_lex_ichar(UU_TOK); return (yylval = UU_TOK);}
<ITEXT>"uu" {S_lex_ichar(UU_TOK); return (yylval = UU_TOK);}
<ITEXT>"Ri" {
switch(S_lang_tok) {
case TAMIL_TOK:
/* unput('i'); ?? use yyless() here XXX */
yyless(1);
return (yylval = RRA_TOK);
break;
default:
return (yylval = RI_TOK);
}
}
<ITEXT>"RI" {
switch(S_lang_tok) {
case TAMIL_TOK:
/* unput('I'); ?? use yyless() here XXX */
yyless(1);
return (yylval = RRA_TOK);
break;
default:
return (yylval = RII_TOK);
}
}
<ITEXT>"Li" {
switch(S_lang_tok) {
case TAMIL_TOK:
/* unput('i'); ?? use yyless() here XXX */
yyless(1);
return (yylval = LDA_TOK);
break;
default:
return (yylval = LI_TOK);
}
}
<ITEXT>"LI" {
switch(S_lang_tok) {
case TAMIL_TOK:
/* unput('I'); ?? use yyless() here XXX */
yyless(1);
return (yylval = LDA_TOK);
break;
default:
return (yylval = LII_TOK);
}
}
<ITEXT>"e" {S_lex_ichar(AY_TOK); return (yylval = AY_TOK);}
<ITEXT>"E" {S_lex_ichar(AAY_TOK); return (yylval = AAY_TOK);}
<ITEXT>"ai" {S_lex_ichar(AI_TOK); return (yylval = AI_TOK);}
<ITEXT>"o" {S_lex_ichar(O_TOK); return (yylval = O_TOK); }
<ITEXT>"O" {S_lex_ichar(OO_TOK); return (yylval = OO_TOK);}
<ITEXT>"au" {S_lex_ichar(AU_TOK); return (yylval = AU_TOK);}
<ITEXT>"aM" {S_lex_ichar(AM_TOK); return (yylval = AM_TOK);}
<ITEXT>"H" {S_lex_ichar(AHA_TOK); return (yylval = AHA_TOK);}
<ITEXT>"k" {S_lex_ichar(KA_TOK); return (yylval = KA_TOK);}
<ITEXT>"q" {S_lex_ichar(KADOT_TOK); return (yylval = KADOT_TOK);}
<ITEXT>"kh" {S_lex_ichar(KHA_TOK); return (yylval = KHA_TOK);}
<ITEXT>"K" {S_lex_ichar(KHADOT_TOK); return (yylval = KHADOT_TOK);}
<ITEXT>"gh" {S_lex_ichar(GHA_TOK); return (yylval = GHA_TOK);}
<ITEXT>"g" {S_lex_ichar(GA_TOK); return (yylval = GA_TOK);}
<ITEXT>"G" {S_lex_ichar(GADOT_TOK); return (yylval = GADOT_TOK);}
<ITEXT>"ng" {S_lex_ichar(NGA_TOK); return (yylval = NGA_TOK);}
<ITEXT>"chh" {S_lex_ichar(CHHA_TOK); return (yylval = CHHA_TOK);}
<ITEXT>"ch" {S_lex_ichar(CHA_TOK); return (yylval = CHA_TOK);}
<ITEXT>"j" {S_lex_ichar(JA_TOK); return (yylval = JA_TOK);}
<ITEXT>"z" {S_lex_ichar(JADOT_TOK); return (yylval = JADOT_TOK);}
<ITEXT>"jh" {S_lex_ichar(JHA_TOK); return (yylval = JHA_TOK);}
<ITEXT>"jn" {S_lex_ichar(JNH_TOK); return (yylval = JNH_TOK);}
<ITEXT>"T" {S_lex_ichar(TTA_TOK); return (yylval = TTA_TOK);}
<ITEXT>"Th" {S_lex_ichar(TTHA_TOK); return (yylval = TTHA_TOK);}
<ITEXT>"D" {S_lex_ichar(DDA_TOK); return (yylval = DDA_TOK);}
<ITEXT>".D" {S_lex_ichar(DDADOT_TOK);return (yylval=DDADOT_TOK);}
<ITEXT>"Dh" {S_lex_ichar(DDHA_TOK); return (yylval = DDHA_TOK);}
<ITEXT>".Dh" {S_lex_ichar(DDHADOT_TOK);return (yylval=DDHADOT_TOK);}
<ITEXT>"N" {S_lex_ichar(NNA_TOK); return (yylval = NNA_TOK);}
<ITEXT>"t" {S_lex_ichar(TA_TOK); return (yylval = TA_TOK);}
<ITEXT>"th" {S_lex_ichar(THA_TOK); return (yylval = THA_TOK);}
<ITEXT>"d" {S_lex_ichar(DA_TOK); return (yylval = DA_TOK);}
<ITEXT>"dh" {S_lex_ichar(DHA_TOK); return (yylval = DHA_TOK);}
<ITEXT>"n" {S_lex_ichar(NA_TOK); return (yylval = NA_TOK);}
<ITEXT>"p" {S_lex_ichar(PA_TOK); return (yylval = PA_TOK);}
<ITEXT>"ph" {S_lex_ichar(PHA_TOK); return (yylval = PHA_TOK);}
<ITEXT>"f" {S_lex_ichar(PHADOT_TOK); return (yylval = PHADOT_TOK);}
<ITEXT>"bh" {S_lex_ichar(BHA_TOK); return (yylval = BHA_TOK);}
<ITEXT>"b" {S_lex_ichar(BA_TOK); return (yylval = BA_TOK);}
<ITEXT>"m" {S_lex_ichar(MA_TOK); return (yylval = MA_TOK);}
<ITEXT>"y" {S_lex_ichar(YA_TOK); return (yylval = YA_TOK);}
<ITEXT>"r" {S_lex_ichar(RA_TOK); return (yylval = RA_TOK);}
<ITEXT>"v" {S_lex_ichar(VA_TOK); return (yylval = VA_TOK);}
<ITEXT>"shh" {S_lex_ichar(SHHA_TOK); return (yylval = SHHA_TOK);}
<ITEXT>"sh" {S_lex_ichar(SHA_TOK); return (yylval = SHA_TOK);}
<ITEXT>"s" {S_lex_ichar(SA_TOK); return (yylval = SA_TOK);}
<ITEXT>"h" {S_lex_ichar(HA_TOK); return (yylval = HA_TOK);}
<ITEXT>"ld" {S_lex_ichar(